#[钛妹]: 钛哥！上次学了append，这个extend()又是啥？  
#[钛妹]: 都是添加元素，有什么区别呀？  

#[钛哥]: 问得好！就像超市购物——  
#[钛哥]: append是单件扫码，extend是整箱上货架  
shopping_list = ["苹果", "香蕉"]  
new_items = ["牛排", "意面"]  

# 错误做法：用append添加多个元素  
shopping_list.append(new_items)  # 列表会被嵌套  
print(shopping_list)  # ['苹果','香蕉',['牛排','意面']]  

# 正确做法：用extend展开添加  
shopping_list.extend(new_items)  # 平铺元素  
print(shopping_list)  # ['苹果','香蕉','牛排','意面']  

#[钛哥]: 记住！extend()是拆包大礼包  
#[钛哥]: 而append()是原封不动塞进去  

#[钛妹]: 那index()有什么用呢？  
#[钛妹]: 比如找"盐"在购物车的位置？  

pantry = ["糖","米","盐","油"]  
salt_index = pantry.index("盐")  # 返回索引位置  
print(f"盐在第{salt_index+1}格")  # 输出3  

#[钛哥]: 但如果找不存在的商品...  
try:  
    pantry.index("面粉")  # 会引发ValueError  
except ValueError:  
    print("找不到面粉！")  # 异常处理  

#[钛妹]: 要是想插队到最前面呢？  
pantry.insert(0, "蜂蜜")  # 在索引0插入  
print(pantry)  # ['蜂蜜','糖','米','盐','油']  

#[钛哥]: insert就像超市插队，但要注意  
#[钛哥]: 位置超出范围时会自动调整到两端  

#[钛妹]: pop()和普通删除有什么区别？  
queue = ["土豆","番茄","洋葱","生姜"]  

# 弹出最后一个元素  
last_item = queue.pop()  # 生姜被取出  
print(f"结账商品：{last_item}")  # 生姜  
print(queue)  # ['土豆','番茄','洋葱']  

# 弹出指定位置元素  
second_item = queue.pop(1)  # 取出番茄  
print(f"优先处理：{second_item}")  # 番茄  
print(queue)  # ['土豆','洋葱']  

#[钛哥]: 重点！pop()会返回被删除的值  
#[钛哥]: 而del语句只是单纯删除  

#[钛妹]: 来个组合技练习！  
# 初始化购物车  
cart = ["牛奶", "面包"]  
# 扩展采购  
cart.extend(["鸡蛋"]*3 + ["苹果"]*2)  

#[钛哥]: 现在要找第三个鸡蛋的位置  
egg_index = cart.index("鸡蛋")  # 返回第一个位置  
print(f"第一个鸡蛋在{egg_index}")  # 2  

#[钛妹]: 这样不准！要跳过前两个  
# 设置查找起始点  
real_egg_index = cart.index("鸡蛋", 3)  # 从索引3开始找  
print(f"第三个鸡蛋在{real_egg_index}")  # 4  

#[钛哥]: 现在把黄油插到面包后面  
bread_index = cart.index("面包")  
cart.insert(bread_index+1, "黄油")  
print(cart)  # ['牛奶','面包','黄油',...]  

#[钛妹]: 最后弹出中间那个苹果  
mid_apple = cart.pop(5)  # 注意索引变化  
print(f"取出待检查的苹果：{mid_apple}")  

#[钛妹]: 今日知识点三连：  
#[钛妹]: 1. extend是拆箱员，append是收纳盒  
#[钛妹]: 2. index像定位器，insert是VIP通道  
#[钛妹]: 3. pop像抓娃娃机，指哪取哪  

#[钛妹]: 对了各位！持续学习才是硬道理！  
#[钛妹]: 点赞关注不迷路！  